//
//
//
//class Solution {
//    public int minPathSum(int[][] grid) {
//        int n = grid.length;
//        int m = grid[0].length;
//        dfs(grid, new boolean[n][m], n, m, 0, 0);
//        return min;
//    }
//
//    int min = Integer.MAX_VALUE;
//    int cur = 0;
//
//    public void dfs(int[][] grid, boolean[][] flg, int n, int m, int i, int j) {
//        if (i == n - 1 && j == m - 1) {
//            min = Math.min(min, grid[i][j] + cur);
//            return;
//        }
//        if (i < 0 || i >= n || j < 0 || j >= m || flg[i][j]) return;
//        flg[i][j] = true;
//        cur += grid[i][j];
//        dfs(grid, flg, n, m, i, j + 1);
//        dfs(grid, flg, n, m, i + 1, j);
//        flg[i][j] = false;
//        cur -= grid[i][j];
//    }
//}